package com.example;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration   //配置类，定义了两个bean对象
public class HeaderConfig {
    /**
     *@Conditional注解：
     *
     * - 作用：按照一定的条件进行判断，在满足给定条件后才会注册对应的bean对象到Spring的IOC容器中。
     * - 位置：方法、类
     * - @Conditional本身是一个父注解，派生出大量的子注解：
     *   - @ConditionalOnClass：判断环境中有对应字节码文件，才注册bean到IOC容器。
     *   - @ConditionalOnMissingBean：判断环境中没有对应的bean(指定类型（value属性）或指定名称（name属性）)，才注册bean到IOC容器。
     *   - @ConditionalOnProperty：判断配置文件中有对应属性和值，才注册bean到IOC容器。这个注解和配置文件当中配置的属性有关系
     *
     */

//    @ConditionalOnClass(name="io.jsonwebtoken.Jwts")//环境中存在指定的这个类，才会将该bean加入IOC容器(pom文件里引入了jwt依赖,所以会运行)
//    @ConditionalOnMissingBean //不存在该类型的bean，才会将该bean加入IOC容器
//    @ConditionalOnMissingBean(name="deptController2")//不存在指定名称的bean，才会将该bean加入IOC容器
    @ConditionalOnProperty(name ="name",havingValue = "itheima")//配置文件中存在指定属性名与值，才会将bean加入IOC容器.先在application.yml配置文件中添加如下的键值对：name: itheima
    @Bean
    public HeaderParser headerParser(){
        return new HeaderParser();
    }

    @Bean
    public HeaderGenerator headerGenerator(){
        return new HeaderGenerator();
    }
}
